#include <iostream>
using namespace std;

template<class T>
// 形式template<typename T1, typename T2, ...> 
//                        ↑称为类型参数或者是说模版参数
T add (T x, T y){
    return x + y;
}
// 函数模版-->生成相对的模版函数-
// -->编译-->链接-->可执行文件

// 上面的模版可以理解为生成了四种不同的模版
// short double long int 类型的函数模版

void test(){
    cout << add(1,2) << endl;
    cout << add(2.2, 3.8) << endl;
}

void test2(){
    int s1 = 1, s2 = 2;
    short i1 = 3, i2 = 4;
    double d1 = 1.1, d2 = 2.2;
    long l1 = 8,  l2 = 9;

    cout << "add(int,int)  " << add(s1, s2) << endl;
    cout << "add(short,short)  " << add(i1, i2) << endl;
    cout << "add(double,double)  " << add(d1, d2) << endl;
    cout << "add(long,long)  " << add(l1, l2) << endl;
}

int main(int atgc, char * argv[])
{
    //test();
    test2();
    return 0;
}

